#include <vector>
using namespace std;

// 函数功能：在有序数组 nums 中查找 target，存在返回下标，不存在返回 -1
// 前提：nums 已按「升序」排列（若降序，需修改比较逻辑）
int binarySearch_Basic(const vector<int>& nums, int target) {
    int left = 0;                  // 左边界：初始指向数组第一个元素
    int right = nums.size() - 1;   // 右边界：初始指向数组最后一个元素

    // 循环条件：left <= right（区间 [left, right] 不为空）
    while (left <= right) {
        // 计算中间下标：避免 (left + right) 溢出，等价于 (left + right) / 2
        int mid = left + (right - left) / 2;

        if (nums[mid] == target) {
            return mid;  // 找到目标，直接返回下标
        } else if (nums[mid] < target) {
            // 目标在右半区间，更新左边界（mid 已排除，无需包含）
            left = mid + 1;
        } else {
            // 目标在左半区间，更新右边界（mid 已排除，无需包含）
            right = mid - 1;
        }
    }

    // 循环结束仍未返回，说明 target 不存在
    return -1;
}
